#!/usr/bin/env node
import { Command } from 'commander'//获取用户输入
import inquirer from 'inquirer'//限制用户输入操作和选择的脚本
import ora from 'ora' //添加loading效果
import chalk from 'chalk'; // 提示文字
import logSymbols from 'log-symbols'; //提示符号
import handlebars from 'handlebars' //模板引擎 
import download from 'download-git-repo';
import fs from 'fs' //node 内置模块 不需要单独引入

const program = new Command();
program
    .command("init") // 命令
    .alias("i") // 命令别名
    .description("初始化一个项目") // 命令描述
    .action(function () {
        //初始化参数
        const promptInit = [
            {
                type: "input",
                message: "输入项目名称:",
                name: "name",
                default: "MyProject",
            },
            {
                type: "list",
                message: "选择项目类型:",
                name: "type",
                choices: ["demo-type-1", "demo-type-2"],
            },
        ];

        inquirer.prompt(promptInit).then((answers) => {
            console.log(answers)
            const { name, type } = answers;
            const downloadUrl = 'direct:https://gitee.com/wdb123/vue3-test.git'
            // 是我的入参 你们可以直接写死自己需要的项目名字
            download(downloadUrl, name, { clone: true }, (err) => {
                const spinner = ora('模板获取中...').start(); // ora后面会说到 一个加载动画
                if (err) {
                    spinner.color = 'red';
                    spinner.text = `模板获取失败，请重新操作,失败原因：${err}`;
                    spinner.fail()
                    return
                }
                spinner.color = 'green';
                spinner.text = '模板下载成功';
                spinner.succeed()
                const packagePath = `./${name}/package.json` //name 文件名字
                const packageContent = fs.readFileSync(packagePath, 'utf8')
                const meta = {
                    name: answers.name
                };
                const packageFinalValue = handlebars.compile(packageContent)(meta)
                // console.log(chalk.green(packageFinalValue))
                fs.writeFileSync(packagePath, packageFinalValue)
            })
        }).catch((error) => {
            if (error.isTtyError) {
                console.log(logSymbols.error, chalk.red(error)) // 这里的logSymbols 和 chalk 后面会说到 
            } else {
                console.log(logSymbols.error, chalk.yellow(error))
            }
        });
    });
program.parse(process.argv)